package comptadub

class MembreController {

	def grailsApplication
	
    def exportService
    def membreService
    
    static allowedMethods = [save: "POST", update: "POST", delete: "POST"]

    def index = {
        redirect(action: "list", params: params)
    }

    def list = {
        flash.typemembre = params.typemembre

        if(!params.max) {
            params.max = Math.min(params.max ? params.int('max') : 10, 100)
        }

        def query = {
            if(params.typemembre) {
                def selTypeMembre = TypeMembre.get(params.membre.toInteger())
                eq("typeMembre", selTypeMembre )
            }
        }

        def criteria = Membre.createCriteria()
        def results = criteria.list(params, query)

        [ membreInstanceList: results ]
    }

    def export = {
        flash.typemembre = params.typemembre
        params.max = null
        params.offset = null

        def query = {
            if(params.typemembre) {
                def selTypeMembre = TypeMembre.get(params.membre.toInteger())
                eq("typeMembre", selTypeMembre )
            }
        }

        def criteria = Membre.createCriteria()
        def results = criteria.list(params, query)

        if (params?.format && params.format != "html")
        {
            response.contentType = grailsApplication.config.grails.mime.types[params.format]
            response.setHeader("Content-disposition", "attachment; filename=membres.${params.extension}")
            List fields = ["id", "nom", "code", "solde", "email", "type.nom"]
            Map labels = ["type.nom": "type"]
            exportService.export(params.format, response.outputStream, results, fields, labels, [:], [:])
        }
    }

    def create = {
        def membreInstance = new Membre()
        membreInstance.properties = params
        return [membreInstance: membreInstance]
    }

    def save = {
        def membreInstance = new Membre(params)
        if (membreInstance.save(flush: true)) {
            flash.message = "${message(code: 'default.created.message', args: [message(code: 'membre.label', default: 'Membre'), membreInstance.id])}"
            redirect(action: "show", id: membreInstance.id)
        }
        else {
            render(view: "create", model: [membreInstance: membreInstance])
        }
    }

    def show = {
        def membreInstance = Membre.get(params.id)
        if (!membreInstance) {
            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'membre.label', default: 'Membre'), params.id])}"
            redirect(action: "list")
        }
        else {
            [membreInstance: membreInstance]
        }
    }

    def edit = {
        def membreInstance = Membre.get(params.id)
        if (!membreInstance) {
            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'membre.label', default: 'Membre'), params.id])}"
            redirect(action: "list")
        }
        else {
            return [membreInstance: membreInstance]
        }
    }

    def update = {
        def membreInstance = Membre.get(params.id)
        
        if (membreInstance) {
            if (params.version) {
                def version = params.version.toLong()
                if (membreInstance.version > version) {
                    
                    membreInstance.errors.rejectValue("version", "default.optimistic.locking.failure", [message(code: 'membre.label', default: 'Membre')] as Object[], "Another user has updated this Membre while you were editing")
                    render(view: "edit", model: [membreInstance: membreInstance])
                    return
                }
            }

            membreService.calculerSolde(membreInstance.id)
            membreInstance.properties = params
            
            if (!membreInstance.hasErrors() && membreInstance.save(flush: true)) {
                flash.message = "${message(code: 'default.updated.message', args: [message(code: 'membre.label', default: 'Membre'), membreInstance.id])}"
                redirect(action: "show", id: membreInstance.id)
            }
            else {
                render(view: "edit", model: [membreInstance: membreInstance])
            }
        }
        else {
            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'membre.label', default: 'Membre'), params.id])}"
            redirect(action: "list")
        }
    }

    def delete = {
        def membreInstance = Membre.get(params.id)
        if (membreInstance) {
            try {
                membreInstance.delete(flush: true)
                flash.message = "${message(code: 'default.deleted.message', args: [message(code: 'membre.label', default: 'Membre'), params.id])}"
                redirect(action: "list")
            }
            catch (org.springframework.dao.DataIntegrityViolationException e) {
                flash.message = "${message(code: 'default.not.deleted.message', args: [message(code: 'membre.label', default: 'Membre'), params.id])}"
                redirect(action: "show", id: params.id)
            }
        }
        else {
            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'membre.label', default: 'Membre'), params.id])}"
            redirect(action: "list")
        }
    }
}
